package com.cy.ppj.service.wechat;

import com.cy.ppj.model.Result;
import com.cy.ppj.model.domian.user.UserWechat;
import com.cy.ppj.model.dto.wechat.WechatTemplateDTO;
import com.cy.ppj.model.enums.wechat.WechatSopce;

import java.util.Map;

/**
 * @description: ppj微信公众号 微信服务
 * @author: Ocean
 * @create: 2018-08-05 01:13
 **/
public interface WechatService {

    /**
     * 获取微信分享access_token
     *
     * @return
     */
    String getAccessToken();

    /**
     * 获取微信分享Ticket
     *
     * @param token
     * @return
     */
    String getTicket(String token);

    /**
     * 获取分享签名
     *
     * @param token
     * @param ticket
     * @param url
     * @return
     */
    Map<String, String> getSignature(String token, String ticket, String url);

    /**
     * 获取用户授权路径
     *
     * @param userId
     * @return
     */
    String getAuthorizeUrl(Long userId, WechatSopce sopce);

    /**
     * 获取用户微信自动登录URL
     *
     * @return
     */
    String getAutoLoginUrl();


    /**
     * 用户授权回调方法
     * 
     * @param code
     * @param state
     * @return
     */
    UserWechat callback(String code, String state);

    /**
     * 绑定用户-微信信息
     *
     * @param userWechat
     */
    void bindUser(UserWechat userWechat);

    /**
     * 解除绑定
     * 
     * @param userId
     */
    void unbind(Long userId);

    /**
     * 发送模版消息
     *
     * @param wechatTemplateDTO
     */
    Result sendTemplateMessage(WechatTemplateDTO wechatTemplateDTO);

    /**
     * 使用用户授权返回的code获取用户access_token、openid，实现使用openid进行自动登录
     *
     * @param code
     * @return
     */
    Result autoLogin(String code);

    /**
     * 根据授权回调的code获取用户的access_token，同时也会返回openid
     * 
     * @param code
     * @return
     */
    Map<String, Object> getUserAccessToken(String code);

    /**
     * 根据用户的access_token、openId获取用户信息
     * 
     * @param accessToken
     * @param openid
     * @return
     */
    Map<String, Object> getUserInfo(String accessToken, String openid);

}
